#!/bin/bash

# 数据库初始化脚本
# 用于创建数据库和数据库用户

# 设置变量的默认值
DB_NAME=${DATABASE_NAME:-"aicet"}
DB_USER=${DATABASE_USER:-"aicet_user"}
DB_PASSWORD=${DATABASE_PASSWORD:-"changeme"}
DB_HOST=${DATABASE_HOST:-"localhost"}
DB_PORT=${DATABASE_PORT:-"5432"}

# 加载环境变量
if [ -f "../.env" ]; then
  echo "📚 加载 .env 配置..."
  set -a
  source ../.env
  set +a
fi

# 显示配置信息
echo "🔧 数据库配置:"
echo "• 数据库名称: $DB_NAME"
echo "• 用户名: $DB_USER"
echo "• 主机: $DB_HOST"
echo "• 端口: $DB_PORT"

# 确认操作
echo -e "\n⚠️  警告: 此操作将创建新的数据库和用户"
read -p "是否继续? (yes/no): " answer

if [ "$answer" != "yes" ]; then
  echo "操作已取消"
  exit 0
fi

# 检查 PostgreSQL 客户端
if ! command -v psql &> /dev/null; then
  echo "❌ 错误: 未找到 PostgreSQL 客户端"
  echo "请安装 PostgreSQL 客户端工具:"
  echo "• Ubuntu/Debian: sudo apt-get install postgresql-client"
  echo "• macOS: brew install postgresql"
  echo "• Windows: 请从 PostgreSQL 官网下载安装程序"
  exit 1
fi

# 检查数据库连接
echo -e "\n📡 检查数据库连接..."
if ! psql -h "$DB_HOST" -p "$DB_PORT" -U postgres -c '\q' &>/dev/null; then
  echo "❌ 无法连接到 PostgreSQL 服务器"
  echo "请确保:"
  echo "1. PostgreSQL 服务正在运行"
  echo "2. 您有正确的 postgres 用户权限"
  echo "3. pg_hba.conf 配置正确"
  exit 1
fi

echo "✓ 数据库连接正常"

# 创建数据库和用户
echo -e "\n🏗️  创建数据库和用户..."

# 使用 heredoc 创建 SQL 脚本
cat << EOF > init.sql
-- 创建用户(如果不存在)
DO \$\$
BEGIN
  IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '$DB_USER') THEN
    CREATE USER $DB_USER WITH PASSWORD '$DB_PASSWORD';
  END IF;
END
\$\$;

-- 创建数据库(如果不存在)
SELECT 'CREATE DATABASE $DB_NAME'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = '$DB_NAME')\gexec

-- 授予权限
GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;

-- 连接到新数据库
\\c $DB_NAME

-- 创建扩展
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pgcrypto";

-- 设置所有者
ALTER DATABASE $DB_NAME OWNER TO $DB_USER;
EOF

# 执行 SQL 脚本
PGPASSWORD=${POSTGRES_PASSWORD} psql -h "$DB_HOST" -p "$DB_PORT" -U postgres -f init.sql

if [ $? -eq 0 ]; then
  echo "✅ 数据库初始化完成!"
  
  # 运行 Prisma 迁移
  echo -e "\n🔄 运行数据库迁移..."
  cd ../ && npm run prisma:migrate

  if [ $? -eq 0 ]; then
    echo "✅ 数据库迁移完成!"
  else
    echo "❌ 数据库迁移失败"
    exit 1
  fi

else
  echo "❌ 数据库初始化失败"
  exit 1
fi

# 清理临时文件
rm init.sql

echo -e "\n📝 数据库连接信息:"
echo "• 数据库 URL: postgresql://$DB_USER:******@$DB_HOST:$DB_PORT/$DB_NAME"
echo -e "\n💡 建议:"
echo "1. 更新 .env 文件中的数据库配置"
echo "2. 运行 npm run dev-setup 完成其他配置"
echo "3. 使用 npm run seed:test 初始化测试数据"

# 显示下一步操作
echo -e "\n📋 后续步骤:"
echo "1. 编辑 .env 文件检查数据库配置"
echo "2. 运行测试确认连接: npm test"
echo "3. 初始化测试数据: npm run seed:test"

echo -e "\n🔐 安全提示:"
echo "• 请修改数据库密码"
echo "• 限制数据库访问IP"
echo "• 定期备份数据"

# 提示需要更新环境变量
echo -e "\n⚠️  注意:"
echo "请确保更新 .env 文件中的以下配置:"
echo "DATABASE_URL=postgresql://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME"
